From 73653b8dde1519ca504ba6dcc170e5d5b8077a90 Mon Sep 17 00:00:00 2001 From: tsteven4 <13596209+tsteven4@users.noreply.github.com> Date: Sun, 30 Jan 2022 09:19:16 -0700 Subject: [PATCH] convert text to Format class (#847) --- CMakeLists.txt | 1 + GPSBabel.pro | 1 + text.cc | 98 +++++++++--------------------------------- text.h | 113 +++++++++++++++++++++++++++++++++++++++++++++++++ vecs.h | 4 +- 5 files changed, 137 insertions(+), 80 deletions(-) create mode 100644 text.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 94a9a38c0..7dcb4d4a9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -265,6 +265,7 @@ set(HEADERS subrip.h tef_xml.h teletype.h + text.h unicsv.h units.h vecs.h diff --git a/GPSBabel.pro b/GPSBabel.pro index d755cd205..49faaaf01 100644 --- a/GPSBabel.pro +++ b/GPSBabel.pro @@ -252,6 +252,7 @@ HEADERS = \ subrip.h \ tef_xml.h \ teletype.h \ + text.h \ unicsv.h \ units.h \ vecs.h \ diff --git a/text.cc b/text.cc index 143b037f6..9b5e478ca 100644 --- a/text.cc +++ b/text.cc @@ -19,69 +19,26 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -#include -#include // for localtime +#include "text.h" #include // for QString, operator!= -#include // for QVector #include // for CaseInsensitive -#include "defs.h" -#include "formspec.h" // for FsChainFind, kFsGpx -#include "gbfile.h" // for gbfprintf, gbfputs, gbfclose, gbfopen, gbfile +#include // for int32_t +#include // for localtime, time_t, tm + +#include "defs.h" // for Waypoint, xfree, geocache_data, pretty_deg_format, rot13, strip_html, xasprintf, CSTR, METERS_TO_FEET, gs_get_cachetype, gs_get_container, mkshort_del_handle, mkshort_from_wpt, mkshort_new_handle, setshort_length, waypt_disp_all, xml_parse_time, utf_string +#include "formspec.h" // for FormatSpecificDataList, kFsGpx +#include "gbfile.h" // for gbfprintf, gbfputs, gbfclose, gbfopen #include "jeeps/gpsmath.h" // for GPS_Math_WGS84_To_UTM_EN #include "src/core/datetime.h" // for DateTime -#include "src/core/xmltag.h" // for xml_findfirst, xml_attribute, xml_tag, fs_xml, xml_findnext - - -static gbfile* file_out; -static short_handle mkshort_handle; +#include "src/core/xmltag.h" // for xml_findfirst, xml_tag, xml_attribute, fs_xml, xml_findnext -static char* suppresssep = nullptr; -static char* txt_encrypt = nullptr; -static char* includelogs = nullptr; -static char* degformat = nullptr; -static char* altunits = nullptr; -static char* split_output = nullptr; -static int waypoint_count; -static QString output_name; #define MYNAME "TEXT" -static -QVector text_args = { - { - "nosep", &suppresssep, - "Suppress separator lines between waypoints", - nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr - }, - { - "encrypt", &txt_encrypt, - "Encrypt hints using ROT13", nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr - }, - { - "logs", &includelogs, - "Include groundspeak logs if present", nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr - }, - { - "degformat", °format, - "Degrees output as 'ddd', 'dmm'(default) or 'dms'", "dmm", ARGTYPE_STRING, ARG_NOMINMAX, nullptr - }, - { - "altunits", &altunits, - "Units for altitude (f)eet or (m)etres", "m", ARGTYPE_STRING, ARG_NOMINMAX, nullptr - }, - { - "splitoutput", &split_output, - "Write each waypoint in a separate file", nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr - }, - -}; - - - -static void -wr_init(const QString& fname) +void +TextFormat::wr_init(const QString& fname) { waypoint_count = 0; output_name = fname; @@ -91,8 +48,8 @@ wr_init(const QString& fname) mkshort_handle = mkshort_new_handle(); } -static void -wr_deinit() +void +TextFormat::wr_deinit() { if (!split_output) { gbfclose(file_out); @@ -101,8 +58,8 @@ wr_deinit() output_name.clear(); } -static void -text_disp(const Waypoint* wpt) +void +TextFormat::text_disp(const Waypoint* wpt) { int32_t utmz; double utme, utmn; @@ -248,30 +205,15 @@ text_disp(const Waypoint* wpt) } } -static void -data_write() +void +TextFormat::write() { if (! suppresssep && !split_output) { gbfprintf(file_out, "-----------------------------------------------------------------------------\n"); } setshort_length(mkshort_handle, 6); - waypt_disp_all(text_disp); + auto text_disp_lambda = [this](const Waypoint* waypointp)->void { + text_disp(waypointp); + }; + waypt_disp_all(text_disp_lambda); } - - -ff_vecs_t text_vecs = { - ff_type_file, - { ff_cap_write, ff_cap_none, ff_cap_none}, - nullptr, - wr_init, - nullptr, - wr_deinit, - nullptr, - data_write, - nullptr, - &text_args, - CET_CHARSET_ASCII, 0 /* CET-REVIEW */ - , NULL_POS_OPS, - nullptr - -}; diff --git a/text.h b/text.h new file mode 100644 index 000000000..6bfce4f68 --- /dev/null +++ b/text.h @@ -0,0 +1,113 @@ +/* + Output only format for Human Readable formats. + + Copyright (C) 2004 Scott Brynen, scott (at) brynen.com + Copyright (C) 2002-2014 Robert Lipe, robertlipe+source@gpsbabel.org + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ +#ifndef TEXT_H_INCLUDED_ +#define TEXT_H_INCLUDED_ + +#include // for QString +#include // for QVector + +#include "defs.h" // for arglist_t, ff_cap, ARG_NOMINMAX, ARGTYPE_BOOL, ARGTYPE_STRING, ff_cap_none, CET_CHARSET_ASCII, Waypoint, ff_cap_write, ff_type, ff_type_file, short_handle +#include "format.h" // for Format +#include "gbfile.h" // for gbfile + + +class TextFormat : public Format +{ +public: + QVector* get_args() override + { + return &text_args; + } + + ff_type get_type() const override + { + return ff_type_file; + } + + QVector get_cap() const override + { + /* waypoints, tracks, routes */ + return { ff_cap_write, ff_cap_none, ff_cap_none}; + } + + QString get_encode() const override + { + return CET_CHARSET_ASCII; + } + + int get_fixed_encode() const override + { + return 0; + } + + void wr_init(const QString& fname) override; + void write() override; + void wr_deinit() override; + +private: + /* Member Functions */ + + void text_disp(const Waypoint* wpt); + + /* Data Members */ + + gbfile* file_out{}; + short_handle mkshort_handle{}; + + char* suppresssep = nullptr; + char* txt_encrypt = nullptr; + char* includelogs = nullptr; + char* degformat = nullptr; + char* altunits = nullptr; + char* split_output = nullptr; + int waypoint_count{}; + QString output_name; + + QVector text_args = { + { + "nosep", &suppresssep, + "Suppress separator lines between waypoints", + nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr + }, + { + "encrypt", &txt_encrypt, + "Encrypt hints using ROT13", nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr + }, + { + "logs", &includelogs, + "Include groundspeak logs if present", nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr + }, + { + "degformat", °format, + "Degrees output as 'ddd', 'dmm'(default) or 'dms'", "dmm", ARGTYPE_STRING, ARG_NOMINMAX, nullptr + }, + { + "altunits", &altunits, + "Units for altitude (f)eet or (m)etres", "m", ARGTYPE_STRING, ARG_NOMINMAX, nullptr + }, + { + "splitoutput", &split_output, + "Write each waypoint in a separate file", nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr + } + + }; +}; +#endif // TEXT_H_INCLUDED_ diff --git a/vecs.h b/vecs.h index 0a25e21a7..4f7611c7e 100644 --- a/vecs.h +++ b/vecs.h @@ -56,6 +56,7 @@ #include "subrip.h" #include "tef_xml.h" #include "teletype.h" +#include "text.h" #include "unicsv.h" #include "wintec_tes.h" #include "xcsv.h" @@ -75,7 +76,6 @@ extern ff_vecs_t tpo3_vecs; extern ff_vecs_t easygps_vecs; extern ff_vecs_t saroute_vecs; extern ff_vecs_t gpl_vecs; -extern ff_vecs_t text_vecs; extern ff_vecs_t igc_vecs; extern ff_vecs_t brauniger_iq_vecs; extern ff_vecs_t mtk_vecs; @@ -249,7 +249,7 @@ private: ShapeFormat shape_fmt; #endif LegacyFormat gpl_fmt {gpl_vecs}; - LegacyFormat text_fmt {text_vecs}; + TextFormat text_fmt; HtmlFormat html_fmt; LegacyFormat igc_fmt {igc_vecs}; LegacyFormat brauniger_iq_fmt {brauniger_iq_vecs}; -- 2.30.2